import pymysql
def db_connect():
    # 打开数据库，参数依次为：主机名/IP，用户名，密码，数据库名，字符集
    db = pymysql.connect(host="localhost", user="root", password="123456", database="python", charset='utf8' )
    return db
def db_close(db):
    db.close()
def mycursor(db):
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()

    # 使用 execute() 方法执行 SQL 查询
    cursor.execute("select version()")

    # 使用 fetchone() 方法获取单条数据
    data = cursor.fetchone()
    print("Datebase version : %s " % data)		# 输出 Datebase version : 8.0.21 
    return cursor

def db_commit(db):#提交数据函数
    db.commit()
def db_rollback(db):#回拉数据库
    db.rollback()

def make_MAC_table(db,cursor,data_table):
    # 如果表 MAC_table 存在，则删除表
    cursor.execute("DROP TABLE IF EXISTS MAC_table")
    # 使用与处理语句创建表
    sql = """
    CREATE TABLE MAC_table(
        sub varchar(50) NOT NULL,
        obj varchar(50) NOT NULL,
        sub_level varchar(50) NOT NULL,
        obj_level varchar(50) NOT NULL,
        policy varchar(50) NOT NULL
    )DEFAULT CHARSET=utf8;
    """
    # 执行 SQL 语句
    cursor.execute(sql)
    # 数据列表
    try:
        # 执行 SQL 语句，插入多条数据
        cursor.executemany("insert into MAC_table(sub, obj, sub_level, obj_level, policy)values (%s, %s, %s, %s, %s)", data_table)
        # 提交数据
        db_commit(db)
        print("Insert!")
    except:
        # 发生错误时回滚
        print("Error")
        db_rollback(db)
def make_MAC_table2(db,cursor,data_table):
    # 如果表 MAC_table 存在，则删除表
    cursor.execute("DROP TABLE IF EXISTS MAC_table2")
    # 使用与处理语句创建表
    sql = """
    CREATE TABLE MAC_table2(
        sub varchar(50) NOT NULL,
        obj varchar(50) NOT NULL,
        sub_level varchar(50) NOT NULL,
        obj_level varchar(50) NOT NULL,
        policy varchar(50) NOT NULL
    )DEFAULT CHARSET=utf8;
    """

    # 执行 SQL 语句
    cursor.execute(sql)
    # 数据列表
    try:
        # 执行 SQL 语句，插入多条数据
        cursor.executemany("insert into MAC_table2(sub, obj, sub_level, obj_level, policy)values (%s, %s, %s, %s, %s)", data_table)
        # 提交数据
        db_commit(db)
        print("Insert!")
    except:
        # 发生错误时回滚
        print("Error")
        db_rollback(db)

def make_obj_info_table(db,cursor,data_table):
        cursor.execute("DROP TABLE IF EXISTS obj_info")
        # 使用与处理语句创建表
        sql = """
        CREATE TABLE obj_info(
            obj varchar(50) NOT NULL,
            content varchar(50) NOT NULL
        )DEFAULT CHARSET=utf8;
        """
        # 执行 SQL 语句
        cursor.execute(sql)
        # 数据列表
        try:
            # 执行 SQL 语句，插入多条数据
            cursor.executemany("insert into obj_info(obj,content)values (%s, %s)", data_table)
            # 提交数据
            db_commit(db)
            print("Insert!")
        
        except:
            # 发生错误时回滚
            print("Error")
            db_rollback(db)
def make_obj_info_table2(db,cursor,data_table):
        cursor.execute("DROP TABLE IF EXISTS obj_info2")
        # 使用与处理语句创建表
        sql = """
        CREATE TABLE obj_info2(
            obj varchar(50) NOT NULL,
            content varchar(50) NOT NULL
        )DEFAULT CHARSET=utf8;
        """
        # 执行 SQL 语句
        cursor.execute(sql)
        # 数据列表
        try:
            # 执行 SQL 语句，插入多条数据
            cursor.executemany("insert into obj_info2(obj,content)values (%s, %s)", data_table)
            # 提交数据
            db_commit(db)
            print("Insert!")
        
        except:
            # 发生错误时回滚
            print("Error")
            db_rollback(db)



#执行生成表
def run_init(table1,table2):
    db = db_connect()
    cursor = mycursor(db)
    make_MAC_table(db,cursor,table1)
    make_obj_info_table(db,cursor,table2)
    # 关闭数据库连接
    db_close(db)

#执行生成表
def run_init2(table1,table2):
    db = db_connect()
    cursor = mycursor(db)
    make_MAC_table2(db,cursor,table1)
    make_obj_info_table2(db,cursor,table2)
    # 关闭数据库连接
    db_close(db)